docker/ubuntuにnginx-luajit入れる
概要
ソースコードから入れてビルドとかそのへん。
参考になるのはこれ。
lua-nginx-module
https://github.com/openresty/lua-nginx-module
まずubuntu自体をdocker machine内に用意
docker run --name="nginx-luajit-websocket-pubsuber" -it ubuntu:14.04 /bin/bash
一応、環境を最新のものにする
apt-get -y update
apt-get -y upgrade
/usr/src/に移動
cd /usr/src/
curlいれて
apt-get install curl
nginxのソース入れて
curl -O http://nginx.org/download/nginx-1.9.12.tar.gz
lua-nginx-moduleのソースを入れて
mkdir lua-nginx-module
cd lua-nginx-module
curl -L -O https://github.com/openresty/lua-nginx-module/archive/v0.10.2.tar.gz
cd ../
nginx-devel-kitをDL
mkdir nginx-devel-kit
cd nginx-devel-kit
curl -L -O https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
cd ../
luajit入れる
DL元はここ。
http://luajit.org/download.html
curl -L -O http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz
いろいろ解凍
tar -xvzf nginx-1.9.12.tar.gz とか。落としたやつ全部その場に解凍。
Luajitをビルド
lualitをビルドするためにいろいろ入れる。
apt-get install make
apt-get install gcc
次のようなbuild.shを、LuaJIT-2.1.0-beta2フォルダ内に作成する。
build.sh
luajit_projectpath=$(pwd)
make
make install "PREFIX=$luajit_projectpath"
nginxをビルド
nginxが依存しているpcreとzlibをインストール
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g-dev
次のような内容のbuild.shを、usr/src/フォルダ直下に作成(行儀がわるい。
build.sh
PROJECT_PATH=$(pwd) #/usr/src
NGINX_VERSION=1.9.11
# luajit 2.1 is already built.
LUAJIT_FOLDER="LuaJIT-2.1.0-beta2"
cd $LUAJIT_FOLDER
sh build.sh
cd ../
# luajit required from Lua-nginx module. set export.
export LUAJIT_LIB=$PROJECT_PATH/$LUAJIT_FOLDER/lib
export LUAJIT_INC=$PROJECT_PATH/$LUAJIT_FOLDER/include/luajit-2.1
# same folder contains below.
NGX_DEVEL_KIT="/usr/src/nginx-devel-kit/ngx_devel_kit-0.2.19"
LUA_NGX_MOD="/usr/src/lua-nginx-module/lua-nginx-module-0.10.2"
cd nginx-1.9.12
# make & install nginx to PROJECT_PATH/NGINX_VERSION
./configure \
--prefix=$PROJECT_PATH/$NGINX_VERSION \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" \
--add-module=$NGX_DEVEL_KIT \
--add-module=$LUA_NGX_MOD
make -j2
make install
で、ビルドする。
cd /usr/src
sh build.sh
うまくいけばできるはず。
luaコード
WebSocketとかのコードを入れる。
docker-machine scp なんたら
luaコードはこちら
https://dl.dropboxusercontent.com/u/36583594/outsource/lua.zip
1.9.x/以下に置いて、luaフォルダとして解凍するだけ。
nginxのコンフィグ設定
1.9.x/conf/nginx.confを、luajitを使えるような形にいじる。
こんな感じ。
#user nobody;
worker_processes auto;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
#keepalive_timeout 65;
#gzip on;
# lua_code_cache off;
# set search paths for pure Lua external libraries (';;' is the default path):
lua_package_path ";;$prefix/lua/lib/?.lua;";
# set search paths for Lua external libraries written in C (can also use ';;'):
# lua_package_cpath ';;$prefix/lua/shared/?.so;';
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
# disque client route.
location /disque_client {
content_by_lua_file lua/disque_client.lua;
}
}
}
太字のところが特にnginx-luaの動作に必要な設定。
この状態で起動することができる。
起動した状態で、nginxの待ってるIPの80番ポート/disque_client にアクセスすると、WebSocket接続後、nginx-luaを経由してdisqueへと接続される。
別コンテナにdisque入れる
Disqueはここから仕入れてる。
https://github.com/antirez/disque/releases
curl -O -L https://github.com/antirez/disque/archive/1.0-rc1.tar.gz
tar -xvzf 1.0-rc1.tar.gz
apt-get install make
cd disque-1.0-rc1/
make
Disqueの起動
src/disque-serverを叩くと、デフォルト設定で起動する。
portは7711が使われている。
/usr/src/disque-1.0-rc1/src/disque-server